package fiuba.algo3.algoThieft.modelo;

public class Tiempo {
	
	private static final int DURACION_SIESTA = 8;
	private static final int HORA_INICIAL = 7;
	private static final int INICIO_TIEMPO_NOCHE = 18;
	private static final int FIN_TIEMPO_MANIANA = 12;
	private static final String[] DIAS = {"LUNES","MARTES","MIERCOLES","JUEVES","VIERNES","SABADO","DOMINGO"};
	
	private int horas;
	
	private int calcularNumeroDeDia (int tiempoEnHoras){
		return tiempoEnHoras / 24;
	}
	
	private int calcularHoraActual (int tiempoEnHoras){
		return tiempoEnHoras % 24;
	}
	
	public Tiempo (){
		this.horas = HORA_INICIAL;
	}
	
	public void avanzar (int tiempoEnHoras){
		int tiempoAnterior = this.getTiempoEnHoras();
		this.incrementarHora (tiempoEnHoras);
		int tiempoPosterior = this.getTiempoEnHoras();
		
		this.avanzarSiHayQueDormir(tiempoAnterior,tiempoPosterior);
	}
	
	private void avanzarSiHayQueDormir (int tiempoAnterior, int tiempoPosterior){
		if ( (this.esDeNoche(tiempoAnterior)) && (this.esTiempoDeDormir(tiempoPosterior)) ){
			this.incrementarHora(DURACION_SIESTA);
		}	
	}
	
	private void incrementarHora (int tiempoEnHoras){
		this.horas += tiempoEnHoras;
	}
	
	private boolean esDeNoche (int tiempoEnHoras){
		return this.calcularHoraActual(tiempoEnHoras) >= INICIO_TIEMPO_NOCHE;
	}
	
	private boolean esTiempoDeDormir (int tiempoEnHoras){
		return this.calcularHoraActual(tiempoEnHoras) <= FIN_TIEMPO_MANIANA;
	}
	
	public int getTiempoEnHoras (){
		return this.horas;
	}
	
	public String comoString (){
		
		int numeroDeDia = calcularNumeroDeDia ( this.getTiempoEnHoras() );
		String diaActual = DIAS [numeroDeDia];
		String hora = Integer.toString(calcularHoraActual( this.getTiempoEnHoras() ) ) ;
		
		if (hora.length()== 1){
			hora= "0"+hora;
		}
		
		return diaActual+" "+ hora + ":" + "00 HS";
	}
}
